StringBuffer
、StringBuilder
和String
最大的不同在於它們兩個都是屬於可變的序列
,意思是它們不像String
一樣,一旦創建了以後,在String Pool(字串池)
就不會再被更動
底層上
String
在創建時,在屬性上使用char[] final value
進行宣告
StringBuffer
、StringBuilder
則是使用char[] value
進行宣告
💡JDK9及之後都是使用byte[]
的基本類型
StringBuffer
、StringBuilder
的差別在於
StringBuffer
是使用synchronized
去進行字串的創建,在多線程
的狀況下,它是線程安全的StringBuilder
沒有使用synchronized
去進行字串的創建,在多線程
的狀況下,它有可能會因為多線程
的狀況造成問題💡依照線程的需求可以斟酌使用這兩個類去進行字串的創建,StringBuilder
對比StringBuffer
來說效率會比較高一點
String str1 = "hello";
StringBuffer str2 = new StringBuffer("hello");
StringBuilder str3 = new StringBuilder("hello");
StringBuilder str4 = new StringBuilder();
使用StringBuilder str4 = new StringBuilder();
時,預設構造器
的長度會是16
,當長度不夠時,每一次的擴容
都會增加原有長度
的2倍+2
在開發中
多線程
的狀況,且常常需要修改字串,使用StringBuffer
較為適合非多線程
的狀況,且常常需要修改字串,使用StringBuilder
較為適合